﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using F1010DB.CustomEntity.DonViCM;
using System.Data;
namespace F1010DB.SearchCommon
{
    public class SearchUnitData : AbstractGetBridgeConnect
    {
        private const string SEARCH_TROOP_BY_PROVINCE = "SELECT MA_DON_VI, TEN_DON_VI FROM HDVNQTRI.DON_VI_MASTER WHERE TINH_THANH_PHO = @tinh AND CAP_DON_VI = '2' AND TINH_TRANG_DON_VI = '1' AND DEL_F = '0'";
        private const string SEARCH_UNIT_BY_TROOP = "SELECT MA_DON_VI, TEN_DON_VI FROM HDVNQTRI.DON_VI_MASTER WHERE MA_DON_VI_CHA = @madonvicha AND TINH_THANH_PHO = @tinh AND CAP_DON_VI = '3' AND TINH_TRANG_DON_VI = '1' AND DEL_F = '0'";
        private const string SEARCH_TROOP_INFO = "SELECT MA_DON_VI, TEN_DON_VI,CAP_DON_VI FROM HDVNQTRI.DON_VI_MASTER WHERE MA_DON_VI = @madonvi AND CAP_DON_VI = '2' AND TINH_TRANG_DON_VI = '1' AND DEL_F = '0'";

        private UnitSearchConditionModel unitSearch;

        private Dictionary<string, object> parameters = null;

        public SearchUnitData()
        { }

        public SearchUnitData(UnitSearchConditionModel unitSearch)
        {
            this.unitSearch = unitSearch;
        }
        
        /// <summary>
        ///  Lấy thông tin đạo
        /// </summary>
        /// <param name="troopId"></param>
        /// <returns></returns>
        public DataTable getTroopInfo(string troopId)
        {
            parameters = new Dictionary<string, object>();
            parameters.Add("@madonvi", troopId);

            DataTable dt = dbContext.readATable(SEARCH_TROOP_INFO, CommandType.Text, parameters);

            if (dt == null || dt.Rows.Count < 0)
            {
                return null;
            }

            return dt;
        }

        public DataTable listTroopByUnit(string tinh)
        {
            int intTinh = Int16.Parse(tinh);

            parameters = new Dictionary<string, object>();
            parameters.Add("@tinh", intTinh);

            return dbContext.readATable(SEARCH_TROOP_BY_PROVINCE, CommandType.Text, parameters);
        }

        /// <summary>
        /// Tìm đơn vị theo liên đoàn
        /// Tính trường hợp ngành
        /// Nếu ngành thiếu thì chỉ duy nhất đơn vị thuộc ngành thiếu
        /// Nếu ngành Kha thì có thêm ngành Thiếu, hoặc Kha
        /// Nếu ngành Tráng thì có thêm ngành Thiếu, Kha, Tráng tính các trường hợp từ đơn vị ngoài vào
        /// Hoặc lý do nghỉ sinh hoạt lâu tính thời điểm nhập dữ liệu
        /// </summary>
        /// <param name="tinh">Mã tỉnh thành</param>
        /// <param name="troopCode">Mã liên đoàn</param>
        /// <param name="isTuyenHua">Dùng trong trường hợp tuyên hứa</param>
        /// <returns></returns>
        public DataTable listUnitByTroop(string tinh, string troopCode, bool isTuyenHua, string currentLevel)
        {
            int intTinh = Int16.Parse(tinh);

            parameters = new Dictionary<string, object>();
            parameters.Add("@tinh", intTinh);
            parameters.Add("@madonvicha", troopCode);

            string s = SEARCH_UNIT_BY_TROOP;

            if (isTuyenHua)
            {
                if (currentLevel.Equals("3")) // Thiếu
                {
                    s = s + " AND NGANH = 3";
                }
                else if (currentLevel.Equals("4")) // Kha
                {
                    s = s + " AND NGANH IN (3,4)";
                }
                else if (currentLevel.Equals("5")) // Tráng
                {
                    s = s + " AND NGANH IN (3,4,5)";
                }
            }
            return dbContext.readATable(s, CommandType.Text, parameters);
        }

        public DataTable getTeam(string madonvi)
        {
            string sql = " SELECT MADOI, TEN_DOI FROM HDVNQTRI.DON_VI_MASTER_DOI WHERE MADONVI = @madonvi";

            parameters = new Dictionary<string, object>();
            parameters.Add("@madonvi", madonvi);

            return dbContext.readATable(sql, CommandType.Text, parameters);
        }

        /// <summary>
        /// Lây danh sách đơn vị theo liên đoàn
        /// </summary>
        /// <param name="troopId"></param>
        /// <returns></returns>
        public DataTable getUnitByTroop(string troopId)
        {
            string sql = "SELECT MA_DON_VI, TEN_DON_VI, MA_DON_VI_CHA FROM HDVNQTRI.DON_VI_MASTER WHERE MA_DON_VI_CHA = @troop AND GIAI_TAN_DON_VI = '0'";

            parameters = new Dictionary<string, object>();
            parameters.Add("@troop", troopId);

            return dbContext.readATable(sql, CommandType.Text, parameters);

        }

        /// <summary>
        /// Lấy danh sách đơn vị theo ngành và liên đoàn
        /// </summary>
        /// <param name="troopId"></param>
        /// <param name="level"></param>
        /// <returns></returns>
        public DataTable getUnitByTroop(string troopId, string level)
        {
            int intLevel = Int16.Parse(level);

            string sql = "SELECT MA_DON_VI, TEN_DON_VI, MA_DON_VI_CHA FROM HDVNQTRI.DON_VI_MASTER WHERE MA_DON_VI_CHA = @troop AND GIAI_TAN_DON_VI = '0' AND NGANH = @nganh";

            parameters = new Dictionary<string, object>();
            parameters.Add("@troop", troopId);
            parameters.Add("@nganh", intLevel);

            return dbContext.readATable(sql, CommandType.Text, parameters);
        }

        /// <summary>
        /// Lấy mã đạo
        /// </summary>
        /// <param name="troopId"></param>
        /// <returns></returns>
        public string getDistrictId(string troopId)
        {
            string sql = "SELECT MA_DON_VI_CHA FROM HDVNQTRI.DON_VI_MASTER WHERE MA_DON_VI = @madonvi AND CAP_DON_VI='2' GROUP BY MA_DON_VI_CHA";

            parameters = new Dictionary<string, object>();
            parameters.Add("@madonvi", troopId);

            DataTable dt = dbContext.readATable(sql, CommandType.Text, parameters);

            return dt.Rows[0][0].ToString();
        }

        /// <summary>
        /// Lấy liên đoàn thuộc đạo
        /// </summary>
        /// <param name="district"></param>
        /// <returns></returns>
        public DataTable getTroopByDistrict(string district)
        {
            string sql = "SELECT MA_DON_VI, TEN_DON_VI FROM HDVNQTRI.DON_VI_MASTER WHERE MA_DON_VI_CHA = @madonvi AND CAP_DON_VI='2'";

            parameters = new Dictionary<string, object>();
            parameters.Add("@madonvi", district);

            return dbContext.readATable(sql, CommandType.Text, parameters);
        }
        
    }
}
